package com.ray.service;

import com.ray.utils.DbMySqlUtilImpl;
import com.ray.utils.DbOracleUtilImpl;
import com.ray.utils.DbUtilImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DbServiceApplication
{
    /**
     * 使用spring框架实现
     */
    public void getConnectionBySrping()
    {
        System.out.println("=======使用Spring框架实现   begin=======");
        ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("beans.xml");
        DbService dbService = cpx.getBean("dbService", DbService.class);
        dbService.getConnetion();
        System.out.println("=======使用Spring框架实现   end=======");
    }

    /**
     * 使用纯java代码实现
     */
    public void getConnectionByJava()
    {
        // 如果我要更换数据库相关处理，需要真正的修改这里的代码
        DbServiceImpl dbService = new DbServiceImpl();

        dbService.setDbUtil(new DbMySqlUtilImpl());
        // dbService.setDbUtil(new DbOracleUtilImpl());

        System.out.println("=======使用纯java代码实现   begin=======");
        dbService.getConnetion();
        System.out.println("=======使用纯java代码实现   end=======");
    }

    /**
     * 使用反射机制实现
     */
    public void getConnectionByReflection()
    {
        try
        {
            System.out.println("=======使用反射机制实现   begin=======");
            DbUtilImpl dbUtilImpl = (DbUtilImpl) Class.forName("com.ray.utils.DbMySqlUtilImpl").getConstructor().newInstance();
            DbService dbService = new DbServiceImpl(dbUtilImpl);
            dbService.getConnetion();
            System.out.println("=======使用反射机制实现   end=======");
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }
}
